#!/usr/bin/env python
# encoding: utf-8

# @Author  : vfengcc
# @File    : shopping.py
# @Time    : 2019/11/20 21:00

def show_product():
    '''
    商品输出显示
    :return:
    '''
    print('{:-^30s}'.format('【商品列表】'))
    print('{}\t{:<4s}\t{}'.format('编号', '名称', '单价'))
    i = 0
    for x in products:
        print('{}\t{:<4s}\t{}元'.format(i + 1, x[0], str(x[1])))
        i += 1


def show_shop_cost(shop_car):
    '''
    结算输出显示
    :param shop_car: 购物车 编号列表
    :return bool:
    '''
    # 存储待结算商品，包含数量，金额
    shop_cost = dict()
    # 商品数量，商品总金额
    totalnum, totalmoney = 0, 0
    if len(shop_car) > 0:
        # 循环购物车列表
        for no in shop_car:
            if no not in shop_cost:
                shop_cost[no] = products[no] + [0, 0]  # 数量 金额
            shop_cost[no][-2] += 1  # 单个商品的数量
            shop_cost[no][-1] += products[no][1]  # 单个商品的金额
            totalmoney += products[no][1]  # 总金额
        totalnum = len(shop_car)  # 总数量
        # 输出显示
        print('\n{:-^30s}'.format('【购买的商品列表】'))
        print('{}\t{:<4s}\t{:<4s}\t{:<4s}\t{:<4s}'.format('编号', '名称', '单价', '数量', '价格'))
        for no, item in shop_cost.items():
            print('{}\t{:<4s}\t{:<4d}\t{:<4d}\t{:<d}元'.format(no + 1, item[0], item[1], item[2], item[3]))
        print('{:-^30s}'.format(''))
        print('商品数量{}, 共计 {} 元'.format(totalnum, totalmoney))
        return True
    else:
        print('还没有添加商品')
        return False


def add_shop_car():
    '''
    添加到购物车
    :return:
    '''
    shop_car = []
    print('\n{:-^30s}'.format('【添加到购物车】(结算请输\'q\')'))
    while True:
        i = input('请输入商品编号:').strip()
        if i.isnumeric() or i == 'q':
            if i == 'q':
                if show_shop_cost(shop_car):
                    break
            else:
                i = int(i)
                if i - 1 >= 0 and i <= len(products):
                    shop_car.append(i - 1)
                else:
                    print('\033[1;31m提示：商品不存在，请重新输入.\033[0m')
        else:
            print('\033[1;31m请输入编号1-{},结算退出输入q\033[0m'.format(len(products)))


# 给定的商品列表
products = [['iphone', 6888], ['MacPro', 14800], ['小米6', 2499], ['Coffee', 31], ['Book', 60], ['Nike', 699]]

# 打印商品列表
show_product()

# 添加到购物车、结算
add_shop_car()

# 写的很棒，没有毛病